perm filename PLAY.FAI[MUS,LCS]5 blob
sn#197666 filedate 1976-01-22 generic text, type T, neo UTF8
00100 TITLE SOUND; DOROTHY BENDER MEMORIAL TITLE 1969,69,69, 1975(LCS)*******
00200
00300 ; ROUTINE TO READ THE OUTPUT FROM THE MUSIC
00400 ; PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
00500 ;
00600 ; NAME OF THE FILE TO BE INPUTTED IS 'MUSIC.MUS' OR 'MUSAA.DMD',
00700 ; THE FIRST RECORD OF WHICH CONTAINS THE
00800 ; NUMBER OF WORDS OF DATA IN THE ENTIRE DISK FILE.
00900
01000 A ← 1 ;WORK
01100 B ← 2 ;WORK
01200 RET ← 3 ;RETURN ACCUMULATOR
01300 T1 ← 4 ; TEMP FOR ADSMAP (JAM)
01400 ;;BUFSIZ ←=20224 ;****** DOUBLE THIS FOR 4-CHANNEL SOUND!!!!!
01500 BUFSIZ ←4400*6 ;OPTIMIZED FOR 3330 DSK. (←4400*3 IN SYS VERSION)
01600 ↓DSKCHN ←1 ;DISK CHANNEL FOR INPUT
01700 ↓ADCHN ←2 ;D-A CHANNEL FOR OUTPUT
01800
01900 OPDEF READCH [51B8]
02000 OPDEF MESSAGE[51B8!3B12]
02100
02200 BEG: CALLI 0,0 ;RESET I/O DEVICES
02300 OPEN DSKCHN,[17 ;MODE
02400 'DSK ' ;DEVICE NAME
02500 0] ;NO BUFFER HEADERS
02600 HALT BEG ;RESTART IF DEVICE IS UNAVAILABLE
02700
02800 MOVE 6,['MUSAA ']
02900 MOVE 7,['DMD ']
03000 SETZM DIR2+3 ;FOR RESTART
03100 SETZM DIR+3 ;FOR RESTART
03200 OUTSTR[ASCIZ/FILE NAME -- /] ;READS '.DMD' FILES ONLY.
03300 SETZM DIR+1
03400 SETZM DIR
03500 SETO 5, ;FLAG FOR EXTENSIONS
03600 MOVE 2,[POINT 6,DIR]
03700 JRST GOT
03800 EXT: MOVE 2,[POINT 6,DIR+1]
03900 SETZ 5,
04000 GOT: INCHWL 1
04100 CAIN 1,15 ; A CR?
04200 JRST GOT
04300 CAIGE 1,60 ; CHECKS FOR GOOD CHARS.
04400 JRST LX
04500 SUBI 1,40
04600 IDPB 1,2
04700 JRST GOT
04800 LX: JUMPE 5,LZ
04900 SKIPN DIR
05000 MOVEM 6,DIR
05100 CAIN 1,56 ; 56='.'
05200 JRST EXT
05300 JRST MESS
05400 LZ: SKIPN DIR+1
05500 MOVEM 7,DIR+1
05600 ;FIND OUT NUMBER OF CHANNELS AND THE SPEED.
05700 MESS: MESSAGE [ASCIZ/ HOW MANY CHANNELS? /]
05800 READCH A
05900 SUBI A,"0" ;CONVERT TO BINR
06000 DPB A,[POINT 2,DACPAR,35]
06100
06200 SPD: MESSAGE [ASCIZ/ SPEED? /]
06300 READCH A
06400 CAIG A,"5" ;IS IT 1 - 5?
06500 JRST SPD2 ;YES
06600 SKIPN DIR+3 ;IS THIS THE 1ST TIME THRU?
06700 JRST SPD ;YES, SO WE NEED A GOOD NUM.
06800 JRST PLA2 ;ANYTHING ELSE WILL REPLAY
06900
07000 SPD2: SUBI A,"0"
07100 DPB A,[POINT 3,DACPAR,26]
07200
07300 PLA2: SETZM DIR+3
07400 SETZM DIR2+3
07500 MOVE 5,DMD ;GET 'DMD '
07600 LOOKUP DSKCHN,DIR
07700 SKIPA ;CAN'T FIND MUSAA.DMD
07800 JRST XOPEN ;FOUND IT
07900 CAMN 5,DIR+1 ;IS DIR+1='DMD '?
08000 JRST MUS ;YES, GO LOOK FOR MUSIC.MUS
08100 MOVEM 5,DIR+1
08200 JRST PLA2 ;TRY IT WITH 'DMD '
08300 MUS: LOOKUP DSKCHN,DIR2 ;TRY FOR MUSIC.MUS
08400
08500 JRST [MESSAGE[ASCIZ/
08600 *** MUSIC FILE NOT FOUND/]
08700 CALLI 12]
08800 ;EXIT IF FILE IS MISSING
08900 MOVE A,DIR2+3 ;GET LENGTH OF MUSIC.MUS
09000 MOVEM A,DIR+3;PUT IT IN RIGHT PLACE
09100
09200 XOPEN: OPEN ADCHN,[117 ;MODE
09300 'DAC ' ;DEVICE NAME
09400 0] ;NO BUFFER HEADERS
09500
09600 JRST [MESSAGE[ASCIZ/
09700 ***D-A NOT AVAILABLE/]
09800 CALLI 12]
09900 ;EXIT IF D-A IS UNAVAILABLE
10000 MTAPE ADCHN,DACPAR
10100
10200 XGPOK: MOVSI 'XGP' ;DOWN TO SPWAR FOR XGP CONFLICT.
10300 DEVUSE 0,
10400 HLRZ 0,0
10500 CAIN 400000
10600 JRST SPWAR
10700 INIT 16,17
10800 SIXBIT .XGP.
10900 0
11000 JRA 16,2(16)
11100 SPWAR: LOCK A,
11200 ;; SPCWAR 17,[CALLI]
11300 MESSAGE [ASCIZ/ GO? /]
11400 READCH A
11420 ; READS TO FIND (AND IGNORE) HEADER.(1ST REC.)
11440 INPUT DSKCHN,HEADER
11450 HRRZ A,BUF1
11460 CAIE A,525252 ; LOOKS FOR MAGIC NUMBER.
11470 USETI DSKCHN,1 ; NO HEADER, SO START AT BEGINNING.
11500
11600
11700 LNTH: movs a,DIR+3 ;get length of file.
11800 movnm a,nwd
11900 ;-----------------------------------------------------
12000
12100 ;BEGIN MAIN BODY OF PROGRAM
12200
12300 MOVE T1,[647003,,0]
12400 ADSMAP T1, ; SET AUDIO SWITCH TEMPORARILY TO DAC (JAM 7/24/75)
12500 ; THE OPTIONS WE ASKED FOR ARE TEMPORARY, WAIT FOR
12600 ; PAGE TO FINISH, DON'T INTERRUPT WITH MORE PAGES,
12700 ; DELAY BEEPS TO END OF XFR.
12800 OUTSTR [ASCIZ /
12900 TO DAC . . ./]
13000 LOOP: JSP RET,SUB ;ROUTINE TO READ AND WRITE
13100 BUF1-1 ;USE BUF1 FOR THE I/O
13200 JUMPLE B,OUT ;DONE
13300
13400 JSP RET,SUB
13500 BUF2-1
13600 JUMPLE B,OUT
13700
13800 JSP RET,SUB ;CALL IT AGAIN
13900 BUF3-1 ;USE BUF3 FOR THE I/O
14000 JUMPG B,LOOP ;GO BACK FOR MORE IF B>0
14100
14200 OUT: close dskchn, ;END OF PROGRAM.
14300 releas adchn,
14400 OUTSTR [ASCIZ / DONE!
14500 /]
14600 SETO T1,
14700 ADSMAP T1, ; RESET AUDIO SWITCH CONNECTION TO PERMANENT (JAM 7/24/75)
14800 ;; SPCWAR 0,'SSW'
14900 UNLOCK
15000 RELEASE 16,
15100 jrst SPD
15200
15300 ;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
15400 ; 1(RET) WILL BE THE RETURN
15500 ; 0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
15600 ; PUT IN THE RIGHT HALF OF THE IOWD.
15700 ; A WILL BE A WORK REGISTER
15800 ; B WILL BE TESTED ON THE OUTSIDE.
15900
16000 SUB: MOVNI A,BUFSIZ ;PICK UP AND COMPLEMENT BUFSIZ
16100 ADDB A,NWD ;A←NWD-BUFSIZ
16200 ;NWD←NWD-BUFSIZ
16300 MOVE B,A ;SAVE B TO BE TESTED FOR LAST
16400 ;TIME.
16500 JUMPL A,LAST ;SET UP FOR LAST TIME.
16600 MOVEI A,0
16700
16800 ;THE IOWD LOOKS LIKE:
16900 ; [-BUFSIZ / BUFI-1]
17000
17100 LAST: ADDI A,BUFSIZ
17200 MOVNS A ;COMPLEMENT A
17300 HRL A,0(RET) ;PICK UP BUFI AND MOVE IT
17400 ;TO THE LEFT SIDE OF A.
17500 MOVSM A,INLIST ;SWAP A AND MOVE IT.
17600 MOVSM A,OUTWC ;SAME FOR OUTPUT.
17700 INPUT DSKCHN,INLIST ;READ A RECORD.
17800 OUTPUT ADCHN,OUTWC ;WRITE THE RECORD.
17900 JRST 1(RET) ;RETURN
18000 ;---------------------------------------------------------
18100
18200 ; STORAGE:
18300
18400 NWD: 0 ;FOR NUMBER OF WORDS OF INPUT.
18500 ↓BUF1: BLOCK BUFSIZ+1 ;BUFFER 1
18600 BUF2: BLOCK BUFSIZ+1 ;BUFFER 2
18700 BUF3: BLOCK BUFSIZ+1 ;BUFFER 3
18800
18900 DMD: 'DMD '
19000 DIR2: 'MUSIC ' ;FILENAME FOR INPUT
19100 'MUS ' ;EXTENSION
19200 0 ;INFORMATION ON FILE
19300 0 ;PROJECT PROG#
19400 DIR: 0 ;NAME
19500 0 ;EXTENSION
19600 0 ;INFORMATION ON FILE
19700 0 ;PROJECT PROG#
19800 CLIST: IOWD 1,NWD ;FOR THE FIRST RECORD
19900 0
20000 INLIST: 0 ;WILL CONTAIN AN IOWD
20100 0
20110 HEADER: IOWD =128,BUF1
20120 0
20200 OUTWC: 0 ;WILL CONTAIN AN IOWD FOR D-A
20300 ;; 3650 ;MAGIC BITS FOR 136.
20400 OUTBIT: 4000 ;BITS FOR D-A
20500 BLOCK 2
20600 DACPAR: 1001 ;SPEED 0=6.4K, 1=12.8, 2=25.6, 3=51.2, 4=102.4, 5=
20700 0
20800 0
20900
21000
21100 A←1
21200 B←2
21300 D←3
21400
21500 ichn←adchn
21600
21700 END BEG